require([
    "Underscore.Crud", 
    "Acaweb.AjaxRequest",
    "jquery", 
    "init",
    "jQuery.Tools.OverLay", 
    ], function(Underscore, Acaweb, $){
        
        /*OverLay's*/
        $(".add-button, .edit-button").overlay({
            mask: {
                color: '#000',
                loadSpeed:  'fast',
                opacity: 0.5
            },
            closeOnClick: false
        });
      
        $.ajaxSetup({
            cache: false
        });
    
        $( ".datepicker" ).datepicker({
            yearRange:"c-50:c+2",
            dateFormat:"dd/mm/yy",
            changeMonth: true,
            changeYear: true
        });
        
        /*Enlace de Ciudades con paises*/
        $.ajaxSetup({
            cache: false
        });
    
        var locaciones = new Acaweb.Locaciones();
            
        $("#paisNac").change(function(){
            $("#departamentoNac").html("");
            $("#municipioNac").html("");
            var valor = $("#paisNac").val();
            locaciones.error = function(){
                    
            }    
            locaciones.success = function(data){
                var departamentos = "<option>- Seleccione -</option>";
                $.each(data, function(k, departamento){
                    departamentos += "<option value='" + departamento.Nombre + "'>";
                    departamentos +=  departamento.Nombre;
                    departamentos += "</option>";
                })
                        
                $("#departamentoNac").html(departamentos);
            }
                    
            locaciones.GetDepartamento(valor);
        });
                
        $("#departamentoNac").change(function(){
            $("#municipioNac").html("");
            var valor = $("#departamentoNac").val();
            locaciones.error = function(){
                alert("Boom...!");
            }    
            locaciones.success = function(data){
                var municipios = "<option>- Seleccione -</option>";
                $.each(data, function(k, municipio){
                        
                    municipios += "<option value='" + municipio.CodigoMunicipio + "'>";
                    municipios +=  municipio.Nombre;
                    municipios += "</option>";
                })
                        
                $("#municipioNac").html(municipios);
            }
                    
            locaciones.GetMunicipioByNombreDepartamento(valor);
        });
    
        var locaciones2 = new Acaweb.Locaciones();
            
        $("#paisRes").change(function(){
            $("#departamentoRes").html("");
            $("#municipioRes").html("");
            var valor = $("#paisRes").val();
            locaciones2.error = function(){
                    
            }    
            locaciones2.success = function(data){
                var departamentos = "<option>- Seleccione -</option>";
                $.each(data, function(k, departamento){
                    departamentos += "<option value='" + departamento.Nombre + "'>";
                    departamentos +=  departamento.Nombre;
                    departamentos += "</option>";
                })
                        
                $("#departamentoRes").html(departamentos);
            }
                    
            locaciones2.GetDepartamento(valor);
        });
                
        $("#departamentoRes").change(function(){
            $("#municipioRes").html("");
            var valor = $("#departamentoRes").val();
            locaciones2.error = function(){
                alert("Boom...!");
            }    
            locaciones2.success = function(data){
                var municipios = "<option>- Seleccione -</option>";
                $.each(data, function(k, municipio){
                        
                    municipios += "<option value='" + municipio.Nombre + "'>";
                    municipios +=  municipio.Nombre;
                    municipios += "</option>";
                })
                        
                $("#municipioRes").html(municipios);
            }
                    
            locaciones2.GetMunicipioByNombreDepartamento(valor);
        });


        /************ Informacion laboral del estudiante */
        LaboralData = function(){
            Underscore.Crud.apply(this, arguments);
            this.add = "AddInformacionLaboral";
            this.edit = "EditInformacionLaboral";
            this.Delete = "DeleteInformacionLaboral";
            this.root = $("#LaboralesData");
        }
        LaboralData.Extend(Underscore.Crud, {
        
            clearForm:function(){
                this.root.find('input[name="HistorialEmpresa[Nombre]"]').val("");
                this.root.find('select[name="HistorialEmpresa[Pais]"]').val("57");
                this.root.find('input[name="HistorialEmpresa[Ciudad]"]').val("");
                this.root.find('input[name="HistorialEmpresa[Direccion]"]').val("");
                this.root.find('input[name="HistorialEmpresa[Telefono]"]').val("");
                this.root.find('input[name="HistorialEmpresa[Ocupacion]"]').val("");
                this.root.find('input[name="HistorialEmpresa[FechaIngreso]"]').val("");

                this.root.find('select[name="HistorialEmpresa[Salario]"]').val("");
                this.root.find('select[name="HistorialEmpresa[Naturaleza]"]').val("");
                this.root.find('select[name="HistorialEmpresa[Sector]"]').val("");
            },
        
            doEdit:function(row){
                //Copiar las caracteristicas del empleo que sera editado.
                var NombreEmpresa = row.find('.nombre-empresa').text();
                var Ciudad = row.find('.ciudad-empresa').text();
                var Direccion = row.find('.direccion-empresa').text();
                var Telefono = row.find('.telefono-empresa').text();
                var Ocupacion = row.find('.cargo-empresa').text();
                var Salario = row.find('.salario-empresa').attr("name");
                var FechaIngreso = row.find('.fecha-empresa').text();
                var SectorEmpresa = row.find(".sector-empresa").attr("name");
                var NaturalezaEmpresa = row.find(".naturaleza-empresa").attr("name");
                var PaisEmpresa = row.find(".pais-empresa").attr("name");
            
                this.root.find('input[name="HistorialEmpresa[Nombre]"]').val(NombreEmpresa);
                this.root.find('select[name="HistorialEmpresa[Pais]"]').val(PaisEmpresa);
                this.root.find('input[name="HistorialEmpresa[Ciudad]"]').val(Ciudad);
                this.root.find('input[name="HistorialEmpresa[Direccion]"]').val(Direccion);
                this.root.find('input[name="HistorialEmpresa[Telefono]"]').val(Telefono);
                this.root.find('input[name="HistorialEmpresa[Ocupacion]"]').val(Ocupacion);
                this.root.find('input[name="HistorialEmpresa[FechaIngreso]"]').val(FechaIngreso);

                this.root.find('select[name="HistorialEmpresa[Salario]"]').val(Salario);
                this.root.find('select[name="HistorialEmpresa[Naturaleza]"]').val(NaturalezaEmpresa);
                this.root.find('select[name="HistorialEmpresa[Sector]"]').val(SectorEmpresa);
            },
            save:function(){
                var action = this.root.find(".editor").data("action");
                var data = this.root.find("input, select").serialize();
            
                this.request.context = this;
                this.request.success = this.onSuccess;
                this.request.invoke(new ModuleCall("Egresados", "ActualizarDatos", action), {
                    "CodigoInterno":codigoInterno
                }, data, "post");
            },
            doDelete:function(pk){
                this.request.context = this;
                this.request.success = this.onSuccess;
                this.request.invoke(new ModuleCall("Egresados", "ActualizarDatos", this.Delete), pk, "", "post");
            },
            onSuccess:function(result){
                $("#LaboralesData").html(result);
                $("#LaboralesData .datepicker").datepicker({
                    yearRange:"c-50:c+2",
                    dateFormat:"dd/mm/yy",
                    changeMonth: true,
                    changeYear: true
                });
                $("#LaboralesData").validate();
                $("#LaboralesData .add-button, #LaboralesData .edit-button").overlay({
                    mask: {
                        color: '#000',
                        loadSpeed:  'fast',
                        opacity: 0.5
                    },
                    closeOnClick: false
                });
            }
        });
        var laboralData = new LaboralData();
        laboralData.prepare();
    
        /************ Informacion academica del estudiante */
        AcademicData = function(){
            Underscore.Crud.apply(this, arguments);
            this.add = "AddInformacionAcademica";
            this.Delete = "DeleteInformacionAcademica";
            this.root = $("#Academicos");
        }
        AcademicData.Extend(Underscore.Crud, {
        
            clearForm:function(){
                this.root.find('input[name="HistorialAcademico[Nombre]"]').val("");
                this.root.find('select[name="HistorialAcademico[NivelPosgrado]"]').val("");
                this.root.find('input[name="HistorialAcademico[TituloRecibido]"]').val("");
                this.root.find('input[name="HistorialAcademico[FechaDeGraduacion]').val("");
            },
        
            save:function(){
                var data = this.root.find("input, select").serialize();
                this.request.context = this;
                this.request.success = this.onSuccess;
                this.request.invoke(new ModuleCall("Egresados", "ActualizarDatos", this.add), {
                    "CodigoInterno":codigoInterno
                }, data, "post");
            },
            doDelete:function(pk){
                this.request.context = this;
                this.request.success = this.onSuccess;
                this.request.invoke(new ModuleCall("Egresados", "ActualizarDatos", this.Delete), pk, "", "post");
            },
            onSuccess:function(result){
                $("#Academicos").html(result);
                $("#Academicos .datepicker").datepicker({
                    yearRange:"c-50:c+2",
                    dateFormat:"dd/mm/yy",
                    changeMonth: true,
                    changeYear: true
                });
                $("#Academicos .add-button, #Academicos .edit-button").overlay({
                    mask: {
                        color: '#000',
                        loadSpeed:  'fast',
                        opacity: 0.5
                    },
                    closeOnClick: false
                }); 
                $("#Academicos").validate();
            }
        });
        var academicData = new AcademicData();
        academicData.prepare();
    
        /************ Informacion de idiomas del estudiante */
        LanguagesData = function(){
            Underscore.Crud.apply(this, arguments);
            this.add = "AddInformacionIdiomas";
            this.edit = "EditInformacionIdiomas";
            this.Delete = "DeleteInformacionIdiomas";
            this.root = $("#Idiomas");
        }
        LanguagesData.Extend(Underscore.Crud, {
        
            clearForm:function(){
                this.root.find('select[name="HistorialIdiomas[Codigo]"]').val("1").removeAttr("disabled");
                this.root.find('select[name="HistorialIdiomas[Lee]"]').val("");
                this.root.find('select[name="HistorialIdiomas[Escribe]"]').val("");
                this.root.find('select[name="HistorialIdiomas[Habla]"]').val("");
            },
        
            doEdit:function(row){
                var CodigoIdioma = row.find('.nombre-idioma').attr("name");
                var LeeIdioma = row.find('.lee-idioma').attr("name");
                var EscribeIdioma = row.find('.escribe-idioma').attr("name");
                var HablaIdioma = row.find('.habla-idioma').attr("name");

                this.root.find('select[name="HistorialIdiomas[Codigo]"]').val(CodigoIdioma).attr("disabled", "disabled");
                this.root.find('select[name="HistorialIdiomas[Lee]"]').val(LeeIdioma);
                this.root.find('select[name="HistorialIdiomas[Escribe]"]').val(EscribeIdioma);
                this.root.find('select[name="HistorialIdiomas[Habla]"]').val(HablaIdioma);
            },
            save:function(){
                var action = this.root.find(".editor").data("action");
                var data = this.root.find("input, select").serialize();
            
                this.request.context = this;
                this.request.success = this.onSuccess;
                this.request.invoke(new ModuleCall("Egresados", "ActualizarDatos", action), {
                    "CodigoInterno":codigoInterno
                }, data, "post");
            },
            doDelete:function(pk){
                this.request.context = this;
                this.request.success = this.onSuccess;
                this.request.invoke(new ModuleCall("Egresados", "ActualizarDatos", this.Delete), pk, "", "post");
            },
            onSuccess:function(result){
                $("#Idiomas").html(result);
                $("#Idiomas .datepicker").datepicker({
                    yearRange:"c-50:c+2",
                    dateFormat:"dd/mm/yy",
                    changeMonth: true,
                    changeYear: true
                });
                $("#Idiomas").validate();
                $("#Idiomas .add-button, #Idiomas .edit-button").overlay({
                    mask: {
                        color: '#000',
                        loadSpeed:  'fast',
                        opacity: 0.5
                    },
                    closeOnClick: false
                });            
            }
        });
        var languagesData = new LanguagesData();
        languagesData.prepare();
    
        /************ Informacion Hijos del estudiante */
        ChildData = function(){
            Underscore.Crud.apply(this, arguments);
            this.add = "AddHijo";
            this.Delete = "DeleteHijo";
            this.root = $("#Hijos");
        }
        ChildData.Extend(Underscore.Crud, {
            prepare:function(){
                this.parent.prepare.apply(this, arguments);
                this.configureForm();
            },
            clearForm:function(){
                this.root.find('input[name="Hijos[Nombre]"]').val("");
                this.root.find('input[name="Hijos[FechaNacimiento]"]').val("");
            },
        
            save:function(){
                var data = this.root.find("input, select").serialize();
                this.request.context = this;
                this.request.success = this.onSuccess;
                this.request.invoke(new ModuleCall("Egresados", "ActualizarDatos", this.add), {
                    "CodigoInterno":codigoInterno
                }, data, "post");
            },
            doDelete:function(pk){
                this.request.context = this;
                this.request.success = this.onSuccess;
                this.request.error = this.onError;
                this.request.invoke(new ModuleCall("Egresados", "ActualizarDatos", this.Delete), pk, "", "post");
            },
            onSuccess:function(result){
                $("#Hijos").html(result);
                $("#Hijos .datepicker").datepicker({
                    yearRange:"c-50:c+2",
                    dateFormat:"dd/mm/yy",
                    changeMonth: true,
                    changeYear: true
                });
                $("#Hijos").validate();
                $("#Hijos .add-button").overlay({
                    mask: {
                        color: '#000',
                        loadSpeed:  'fast',
                        opacity: 0.5
                    },
                    closeOnClick: false
                });  
                this.configureForm();
            },
            onError:function(){
                alert("Ay! :(");
            },
            configureForm:function(){
                /*Selector de Posible Carrera*/
                $('#posibleCarrera').hide();

                $('#estudiaraEnUSB').change(function(){
                    var val = $(this).val();
                    if(val == "1"){
                        $('#posibleCarrera').show();
                    }else{
                        $('#posibleCarrera').hide();
                    }
                });

                $('#estudiaraEnUSB').change();
            }
        
        });
        var childData = new ChildData();
        childData.prepare();
    
        /************ Reconocimientos del estudiante */
        ReconocimientosData = function(){
            Underscore.Crud.apply(this, arguments);
            this.add = "AddReconocimiento";
            this.edit = "EditReconocimiento";
            this.Delete = "DeleteReconocimiento";
            this.root = $("#LaboralesRecognition");
        }
        ReconocimientosData.Extend(Underscore.Crud, {
        
            clearForm:function(){
                this.root.find('input').val("");
            },
        
            doEdit:function(row){
                //Copiar las caracteristicas del empleo que sera editado.
                var Descripcion = row.find('.descripcion-reconocimiento').text();
                var Institucion = row.find('.nombre-empresa').text();
            
                if(Institucion == "N/A"){
                    this.root.find('select[name="Reconocimiento[Institucion]"]').val("");
                }
                this.root.find('input[name="Reconocimiento[Descripcion]"]').val(Descripcion);
                this.root.find('input[name="Reconocimiento[Institucion]"]').val(Institucion);
            },
            save:function(){
                var action = this.root.find(".editor").data("action");
                var data = this.root.find("input").serialize();
                console.log(data)
                this.request.context = this;
                this.request.success = this.onSuccess;
                this.request.invoke(new ModuleCall("Egresados", "ActualizarDatos", action), {
                    "CodigoInterno":codigoInterno
                }, data, "post");
            },
            doDelete:function(pk){
                this.request.context = this;
                this.request.success = this.onSuccess;
                this.request.invoke(new ModuleCall("Egresados", "ActualizarDatos", this.Delete), pk, "", "post");
            },
            onSuccess:function(result){
                $("#LaboralesRecognition").html(result);
                $("#LaboralesRecognition .datepicker").datepicker({
                    yearRange:"c-50:c+2",
                    dateFormat:"dd/mm/yy",
                    changeMonth: true,
                    changeYear: true
                });
                $("#LaboralesRecognition").validate();
                $("#LaboralesRecognition .add-button, #LaboralesRecognition .edit-button").overlay({
                    mask: {
                        color: '#000',
                        loadSpeed:  'fast',
                        opacity: 0.5
                    },
                    closeOnClick: false
                });            
            }
        });
        var reconocimientosData = new ReconocimientosData();
        reconocimientosData.prepare();
    
        $("#SubmitButton").click(function(){
            $("#ActualizarDatosForm").submit();
        });
                       
        $("#enlace").click(function () {
            $("#complementariosButton").click();
        });
                
        /*Selector Cual?*/
        $('#cual').hide();
            
        $('#proyectoSocial').change(function(){
            var val = $(this).val();
            if(val == "otro"){
                $('#cual').show();
                $('#entradaCual').addClass('required');
            }else{
                $('#cual').hide();
                $('#entradaCual').removeClass('required');
            }
        });
                
        $('#proyectoSocial').change();
    
    });

